﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Systemet.Views
{
    public partial class BudgeteringPerProdukt : UserControl
    {
        private bool IsNewBudget = false;
        private string currentProdID;
        private string currentProdNamn;
        private int currentBudgetID;
        private Domain.ProdukController pC;
        private KundController kC;
        private IEnumerable<Kundregister> customers;
        private const int prodIDColumn = 0;
        private const int prodNameColumn = 1;
        private const int customerIDColumn = 2;
        private const int customerNameColumn = 3;
        private const int avtalColumn = 4;
        private const int gradAvtalColumn = 5;
        private const int tilläggColumn = 6;
        private const int gradTilläggColumn = 7;
        private const int budgetColumn = 8;
        private const int timColumn = 9;
        private const int commentColumn = 10;
        private const int låstColumn = 11;
        private const int dateColumn = 12;
        private const int signeradColumn = 13;
        private const int intäktsBudgIDColumn = 14;
        private const int prodgruppColumn = 15;
        private const int avdelningColumn = 16;


        public BudgeteringPerProdukt()
        {
            InitializeComponent();
            AccessController.Instance.MainView = this;
        }

        public void clearDatagridView()
        {
            if (this.dgvBudgPerProdukt.DataSource != null)
            {
                this.dgvBudgPerProdukt.DataSource = null;
            }
            else
            {
                this.dgvBudgPerProdukt.Rows.Clear();
            }
            IsNewBudget = true;
            clearTbs();
            IsNewBudget = false;
            CurrentProduct("", "");
        }
        //Labelnamnsättning + deklarerar vilken produkt som arbetas med
        public void CurrentProduct(string prodid, string prodnamn)
        {
            currentProdID = prodid;
            currentProdNamn = prodnamn;
            lblProdID2.Text = "ProduktID: " + currentProdID;
            lblProdNamn2.Text = "Produktnamn: " + currentProdNamn;
            if (currentProdID != "")
            {

                btnNyRad.Enabled = true;
            }
            else
            {
                EditableTbs(false);
                btnNyRad.Enabled = false;
            }

        }
        public void UpdateDgv(List<Intäktsbudget> budgets)
        {
            IsNewBudget = true;
            clearTbs();
            IsNewBudget = false;
            EditableTbs(false);
            dgvBudgPerProdukt.DataSource = budgets;
            dgvBudgPerProdukt.Columns[prodIDColumn].Visible = false;
            dgvBudgPerProdukt.Columns[prodNameColumn].Visible = false;
            dgvBudgPerProdukt.Columns[låstColumn].Visible = false;
            dgvBudgPerProdukt.Columns[dateColumn].Visible = false;
            dgvBudgPerProdukt.Columns[intäktsBudgIDColumn].Visible = false;
            dgvBudgPerProdukt.Columns[prodgruppColumn].Visible = false;
            dgvBudgPerProdukt.Columns[avdelningColumn].Visible = false;
            dgvBudgPerProdukt.Columns[customerIDColumn].Width = 60;
            dgvBudgPerProdukt.Columns[customerNameColumn].Width = 130;
            dgvBudgPerProdukt.Columns[avtalColumn].Width = 60;
            dgvBudgPerProdukt.Columns[gradAvtalColumn].Width = 70;
            dgvBudgPerProdukt.Columns[tilläggColumn].Width = 60;
            dgvBudgPerProdukt.Columns[gradTilläggColumn].Width = 70;
            dgvBudgPerProdukt.Columns[budgetColumn].Width = 60;
            dgvBudgPerProdukt.Columns[timColumn].Width = 60;
            dgvBudgPerProdukt.Columns[commentColumn].Width = 260;
            dgvBudgPerProdukt.Columns["Avtal"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Tillägg"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Budget"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Timmar"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Avtal"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Tillägg"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Budget"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["Timmar"].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvBudgPerProdukt.Columns["AvserDatum"].Visible = false;

            lblTotalbelopp.Visible = true;
            tBSumAvtal.Visible = true;
            tBSumTillägg.Visible = true;
            tBSumBudget.Visible = true;
            tBSumTimmar.Visible = true;
            tBSumAvtal.Location = new Point((dgvBudgPerProdukt.Columns[customerIDColumn].Width + dgvBudgPerProdukt.Columns[customerNameColumn].Width), 0);
            tBSumAvtal.Width = dgvBudgPerProdukt.Columns[avtalColumn].Width;
            tBSumTillägg.Location = new Point((dgvBudgPerProdukt.Columns[customerIDColumn].Width + dgvBudgPerProdukt.Columns[customerNameColumn].Width + dgvBudgPerProdukt.Columns[avtalColumn].Width + dgvBudgPerProdukt.Columns[gradAvtalColumn].Width), 0);
            tBSumTillägg.Width = dgvBudgPerProdukt.Columns[tilläggColumn].Width;
            tBSumBudget.Location = new Point((dgvBudgPerProdukt.Columns[customerIDColumn].Width + dgvBudgPerProdukt.Columns[customerNameColumn].Width + dgvBudgPerProdukt.Columns[avtalColumn].Width + dgvBudgPerProdukt.Columns[gradAvtalColumn].Width + dgvBudgPerProdukt.Columns[tilläggColumn].Width + dgvBudgPerProdukt.Columns[gradTilläggColumn].Width), 0);
            tBSumBudget.Width = dgvBudgPerProdukt.Columns[budgetColumn].Width;
            tBSumTimmar.Location = new Point((dgvBudgPerProdukt.Columns[customerIDColumn].Width + dgvBudgPerProdukt.Columns[customerNameColumn].Width + dgvBudgPerProdukt.Columns[avtalColumn].Width + dgvBudgPerProdukt.Columns[gradAvtalColumn].Width + dgvBudgPerProdukt.Columns[tilläggColumn].Width + dgvBudgPerProdukt.Columns[gradTilläggColumn].Width + dgvBudgPerProdukt.Columns[budgetColumn].Width), 0);
            tBSumTimmar.Width = dgvBudgPerProdukt.Columns[timColumn].Width;
            TbSummering();


        }


        //Metod för att summera avtal, tillägg och budget och fylla respektive tb med rätt värde
        private void TbSummering()
        {
            int avtal = 0;
            for (int i = 0; i < dgvBudgPerProdukt.Rows.Count; i++)
            {
                avtal = avtal + int.Parse(dgvBudgPerProdukt.Rows[i].Cells[avtalColumn].Value.ToString());


            }
            tBSumAvtal.Text = avtal.ToString();

            int tillagg = 0;
            for (int j = 0; j < dgvBudgPerProdukt.Rows.Count; j++)
            {
                tillagg = tillagg + int.Parse(dgvBudgPerProdukt.Rows[j].Cells[tilläggColumn].Value.ToString());
            }
            tBSumTillägg.Text = tillagg.ToString();

            int budget = 0;
            for (int k = 0; k < dgvBudgPerProdukt.Rows.Count; k++)
            {
                budget = budget + int.Parse(dgvBudgPerProdukt.Rows[k].Cells[budgetColumn].Value.ToString());
            }
            tBSumBudget.Text = budget.ToString();

            int timmar = 0;
            for (int l = 0; l < dgvBudgPerProdukt.Rows.Count; l++)
            {
                timmar = timmar + int.Parse(dgvBudgPerProdukt.Rows[l].Cells[timColumn].Value.ToString());
            }
            tBSumTimmar.Text = timmar.ToString();
        }


        private void dgvBudgPerProdukt_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            cmbGradA.Items.Clear();
            cmbGradT.Items.Clear();
            cmbGradA.Items.Add("Osäker");
            cmbGradA.Items.Add("Säker");
            cmbGradT.Items.Add("Osäker");
            cmbGradT.Items.Add("Säker");
            int currentRow = dgvBudgPerProdukt.CurrentCell.RowIndex;

            if (dgvBudgPerProdukt.Rows[currentRow].Cells[customerIDColumn].Value != null)
            {
                cmbKundID.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[customerIDColumn].Value.ToString();
            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[customerNameColumn].Value != null)
            {
                cmbKundNamn.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[customerNameColumn].Value.ToString();
            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[avtalColumn].Value != null)
            {
                tBAvtal.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[avtalColumn].Value.ToString();
            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[gradAvtalColumn].Value != null)
            {
                if (dgvBudgPerProdukt.Rows[currentRow].Cells[gradAvtalColumn].Value.ToString().Trim() == "Osäker")
                {
                    cmbGradA.SelectedIndex = 0;
                }
                if (dgvBudgPerProdukt.Rows[currentRow].Cells[gradAvtalColumn].Value.ToString().Trim() == "Säker")
                {
                    cmbGradA.SelectedIndex = 1;

                }


            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[tilläggColumn].Value != null)
            {
                tBTillagg.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[tilläggColumn].Value.ToString();
            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[gradTilläggColumn].Value != null)
            {
                if (dgvBudgPerProdukt.Rows[currentRow].Cells[gradTilläggColumn].Value.ToString().Trim() == "Osäker")
                {
                    cmbGradT.SelectedIndex = 0;
                }
                if (dgvBudgPerProdukt.Rows[currentRow].Cells[gradTilläggColumn].Value.ToString().Trim() == "Säker")
                {
                    cmbGradT.SelectedIndex = 1;
                }


            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[budgetColumn].Value != null)
            {
                tBBudget.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[budgetColumn].Value.ToString();
            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[timColumn].Value != null)
            {
                tBTim.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[timColumn].Value.ToString();
            }
            if (dgvBudgPerProdukt.Rows[currentRow].Cells[commentColumn].Value != null)
            {
                tBKommentar.Text = dgvBudgPerProdukt.Rows[currentRow].Cells[commentColumn].Value.ToString();
            }

            currentBudgetID = int.Parse(dgvBudgPerProdukt.Rows[currentRow].Cells[intäktsBudgIDColumn].Value.ToString());
            IsNewBudget = false;
            EditableTbs(true);

        }

        private void EditableTbs(bool IsEditable)
        {

            cmbKundID.Enabled = IsNewBudget;
            cmbKundNamn.Enabled = IsNewBudget;

            tBAvtal.Enabled = IsEditable;
            cmbGradT.Enabled = IsEditable;
            cmbGradA.Enabled = IsEditable;
            tBTillagg.Enabled = IsEditable;
            cmbGradT.Enabled = IsEditable;
            btnTabortRad.Enabled = IsEditable;
            tBTim.Enabled = IsEditable;
            tBKommentar.Enabled = IsEditable;
            cmbKundNamn.Focus();
        }
        private void clearTbs()
        {

            tBAvtal.Text = "0";
            cmbGradA.Items.Clear();
            cmbGradT.Items.Clear();
            cmbGradT.Text = "";
            cmbGradA.Text = "";
            cmbGradA.Items.Add("Osäker");
            cmbGradA.Items.Add("Säker");
            cmbGradT.Items.Add("Osäker");
            cmbGradT.Items.Add("Säker");
            tBTillagg.Text = "0";
            tBBudget.Text = "0";
            tBTim.Text = "0";
            tBKommentar.Text = "";
            lblTotalbelopp.Visible = IsNewBudget;
            tBSumTimmar.Visible = IsNewBudget;
            tBSumAvtal.Visible = IsNewBudget;
            tBSumTillägg.Visible = IsNewBudget;
            tBSumBudget.Visible = IsNewBudget;

            if (IsNewBudget)
            {
                cmbKundID.Text = "";
                cmbKundNamn.Text = "";
            }

        }

        private void cmbKundID_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sender == cmbKundID)
            {
                foreach (Kundregister k in customers)
                {
                    if (k.kundID == cmbKundID.Text)
                    {
                        cmbKundNamn.Text = k.kundNamn;
                        break;
                    }
                }
            }
        }

        private void cmbKundNamn_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sender == cmbKundNamn)
            {
                foreach (Kundregister k in customers)
                {
                    if (k.kundNamn == cmbKundNamn.Text)
                    {
                        cmbKundID.Text = k.kundID;
                        break;
                    }
                }
            }
        }
        //Ny rad
        private void btnNyRad_Click(object sender, EventArgs e)
        {
            IsNewBudget = true;
            clearTbs();
            cmbGradA.SelectedIndex = 0;
            cmbGradT.SelectedIndex = 0;
            EditableTbs(true);
            retrieveCustomers();
        }
        //Hämtar
        private void retrieveCustomers()
        {
            kC = new KundController();
            customers = kC.RetrieveCustomers();
            ClearLists();
            fillSearchOptions();
        }
        private void ClearLists()
        {
            cmbKundID.Items.Clear();
            cmbKundNamn.Items.Clear();
        }
        //Fyller comboboxar
        private void fillSearchOptions()
        {
            foreach (Kundregister k in customers)
            {
                if (!cmbKundNamn.Items.Contains(k.kundNamn))
                {
                    cmbKundNamn.Items.Add(k.kundNamn);
                }
                if (!cmbKundID.Items.Contains(k.kundID))
                {
                    cmbKundID.Items.Add(k.kundID);
                }
            }
        }
        //Validerar en budget
        private void BudgetValidation(object sender, EventArgs e)
        {

            string avtal = tBAvtal.Text;
            string tillagg = tBTillagg.Text;
            string gradA = cmbGradA.Text;
            string gradT = cmbGradT.Text;
            string tim = tBTim.Text;

            string kundID = cmbKundID.Text;
            string kundNamn = cmbKundNamn.Text;

            kC = new KundController();
            bool validated = kC.BudgetValidation(avtal, tillagg, gradA, gradT, tim, currentProdID, currentProdNamn, kundID, kundNamn);
            if (validated)
            {
                int intAvtal = Convert.ToInt32(tBAvtal.Text);
                int intTillagg = Convert.ToInt32(tBTillagg.Text);
                int sum = intAvtal + intTillagg;
                tBBudget.Text = Convert.ToString(sum);
                btnSpara.Enabled = true;
            }
            else
            {
                btnSpara.Enabled = false;
            }
        }
        //Tar bort en rad
        private void btnTabortRad_Click(object sender, EventArgs e)
        {
            DialogResult ValidateBox = MessageBox.Show("Vill du verkligen ta bort denna budgetrad?", "Borttagning av Budgetrad", MessageBoxButtons.YesNo);
            if (ValidateBox == DialogResult.Yes)
            {
                kC = new KundController();
                bool isSuccessful = kC.RemoveBudgetRow(currentBudgetID);
                if (isSuccessful)
                {
                    pC = new Domain.ProdukController();
                    pC.UpdateBudgetPerProduktDGV(currentProdID, currentProdNamn, "", "");
                }
                else
                {
                    //DoSomething
                }
            }
            if (ValidateBox == DialogResult.No)
            {
                //DO Nothing
            }
        }
        //sparar 
        private void btnSpara_Click(object sender, EventArgs e)
        {
            string avtal = tBAvtal.Text;
            string tillagg = tBTillagg.Text;
            string gradA = cmbGradA.Text;
            string gradT = cmbGradT.Text;
            string tim = tBTim.Text;
            string kommentar = tBKommentar.Text;

            string kundID = cmbKundID.Text;
            string kundNamn = cmbKundNamn.Text;

            kC = new KundController();
            bool IsSuccessfull = kC.CreateBudgetRow(avtal, tillagg, gradA, gradT, tim, kommentar, currentProdID, currentProdNamn, kundID, currentBudgetID, IsNewBudget, false);
            if (IsSuccessfull)
            {
                clearTbs();
                EditableTbs(false);
            }
        }

        private void tBTillagg_Leave(object sender, EventArgs e)
        {
            if (tBTillagg.Text == "" && tBTillagg.Focused == false)
            {
                tBTillagg.Text = "0";
            }

        }

        private void tBTim_Leave(object sender, EventArgs e)
        {
            if (tBTim.Text == "" && tBTim.Focused == false)
            {
                tBTim.Text = "0";
            }
        }





    }
}
